package cn.lagou.Homework

/*每瓶啤酒2元，3个空酒瓶或者5个瓶盖可换1瓶啤酒。100元最多可喝多少瓶啤酒？（不允许借啤酒）
思路：利用递归算法，一次性买完，然后递归算出瓶盖和空瓶能换的啤酒数*/
object BeerProblem {
  /**
   *  递归计算酒瓶
   * @param beer         状态量：当前酒瓶数
   * @param empty_bottle 状态量：空瓶数
   * @param bottle_cap   状态量：瓶盖数
   * @return 结果：啤酒总数
   */
  def beerCount_Recursive(beer: Int, empty_bottle: Int = 0, bottle_cap: Int = 0): Int = {
    //无法再兑换啤酒的情况：新增的空瓶加积攒的空瓶小于3，新增的瓶盖加积攒的瓶盖小于5
    if ((beer + empty_bottle) < 3 && (beer + bottle_cap) < 5) beer
    else //再兑换啤酒的情况：累计酒瓶=喝的酒 + 喝完酒，兑换新酒瓶状态下的将要喝的酒瓶数
      beer + beerCount_Recursive((empty_bottle + beer) / 3 + (bottle_cap + beer) / 5,
        (empty_bottle + beer) % 3, (bottle_cap + beer) % 5)
  }

  def main(args: Array[String]): Unit = {
    for (i<- 1 to 5) println(s"$i : \t bottle:${beerCount_Recursive(i)} \t ratio: ${beerCount_Recursive(i)*1.0/i}")

    println(s"50瓶 : \t bottle:${beerCount_Recursive(100/2)} \t ratio: ${beerCount_Recursive(100)*1.0/100}")
  }
}
